# models.py: 模型，数据库
from .exts import db

# 类 => 表
# 类属性 => 表字段
# 对象 => 表的一条记录
# 班级 ： 学生 = 1：N
# -------------------------------一对多----------------------------------
class Grade(db.Model):
    # 表名
    __tablename__ = 'grade'
    # 定义表字段
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(30), unique=True)
    # 建立联系：
    #   第一个参数：关联的模型名（表）
    #   第二个参数：反向引用的名称：grade对象
    #             让student去反过来得到grade对象的名称:student.grade
    #   第三个参数：懒加载，延迟加载
    #   这里的students不是字段，是一个类属性
    students = db.relationship('Student',backref='grade', lazy=True)
class Student(db.Model):
    # 表名
    __tablename__ = 'student'
    # 定义表字段
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    age = db.Column(db.Integer)
    name = db.Column(db.String(30), unique=True)
    # 外键：跟Grade表中的id字段关联
    gradeid = db.Column(db.Integer,db.ForeignKey(Grade.id))

# -------------------------------多对多----------------------------------
# 用户 ： 电影 = N ：M
# 中间表，用户收藏电影
collect = db.Table(
    'collect', #表名
    db.Column('user_id', db.Integer, db.ForeignKey('usermodel.id'), primary_key=True),
    db.Column('movie_id', db.Integer, db.ForeignKey('movie.id'), primary_key=True)
)


# 用户表
class UserModel(db.Model):
    __tablename__ = 'usermodel'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(30))
    age = db.Column(db.Integer)


# 电影表
class Movie(db.Model):
    __tablename__ = 'movie'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(30))
    # 关联
    users = db.relationship('UserModel',backref='movies', lazy='dynamic', secondary=collect)

